单片机函数单独编译到固定地址,给别的程序调用 您所在的位置:网站首页 单片机 复制 单片机函数单独编译到固定地址,给别的程序调用

单片机函数单独编译到固定地址,给别的程序调用

2023-08-28 07:31| 来源: 网络整理| 查看: 265

参考:

《嵌入式中 固化函数接口,并通过函数的入口地址来调用》

https://blog.csdn.net/qq_21475601/article/details/77366924

在单片机或嵌入式中,有这样的一个需求,能不能实现和PC上的电脑的DLL功能,把某部分功能单独编译。这样不但便宜开发维护,模块化编程嘛,更重要的是,可以减少FLASH使用量,比如有BOOT和APP两个程序,像USB,CAN等共有的功能,就可以共用,不用再单独写,试问可以减少多少代码量。

#ifndef __at #define __at(_addr) __attribute__ ((at(_addr))) #endif

 

uint32_t GetTime(void) { printf("2022.08.18_10:49:00\r\n"); } typedef uint32_t (*B_get_time)(void); //定义一个函数指针类型,这个类型要和将要固化的函数(如:GetTime)类型一致。 B_get_time B_func __at(0x20000UL);//定义一个 B_get_time 类型的函数变量,并放在固定位置(如:0x20000)。 B_get_time B_func = GetTime; //将GetTime函数的入口地址放在新定义的 B_func 函数变量中。

 

typedef uint32_t (*A_get_time)(void);//定义一个函数指针类型,这个类型要和B程序中固化的函数(如:GetTime)类型一致。 uint32_t get_time(void)//定义一个函数实体来完成调用 { A_get_time func; //定义一个 A_get_time 类型的函数变量 func = (A_get_time)(*((volatile unsigned long*)(0x20000UL)));//将地址为0x20000里的内容,转换为 A_get_time型函数指针 return func();//调用func();至此完成调用 }

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有